package models

import "fmt"

type CreateResponseParams struct {
	TaskId      []string `json:"taskId"`      // 任务id
	RequestId   string   `json:"requestId"`   // 请求id
	InstanceSet []string `json:"instanceSet"` // 实例id列表
}

type ItemPrice struct {
	UnitPrice                   float64 `json:"UnitPrice,omitnil" name:"UnitPrice"`
	ChargeUnit                  string  `json:"ChargeUnit,omitnil" name:"ChargeUnit"`
	OriginalPrice               float64 `json:"OriginalPrice,omitnil" name:"OriginalPrice"`
	DiscountPrice               float64 `json:"DiscountPrice,omitnil" name:"DiscountPrice"`
	Discount                    float64 `json:"Discount,omitnil" name:"Discount"`
	UnitPriceDiscount           float64 `json:"UnitPriceDiscount,omitnil" name:"UnitPriceDiscount"`
	UnitPriceSecondStep         float64 `json:"UnitPriceSecondStep,omitnil" name:"UnitPriceSecondStep"`
	UnitPriceDiscountSecondStep float64 `json:"UnitPriceDiscountSecondStep,omitnil" name:"UnitPriceDiscountSecondStep"`
	UnitPriceThirdStep          float64 `json:"UnitPriceThirdStep,omitnil" name:"UnitPriceThirdStep"`
	UnitPriceDiscountThirdStep  float64 `json:"UnitPriceDiscountThirdStep,omitnil" name:"UnitPriceDiscountThirdStep"`
	OriginalPriceThreeYear      float64 `json:"OriginalPriceThreeYear,omitnil" name:"OriginalPriceThreeYear"`
	DiscountPriceThreeYear      float64 `json:"DiscountPriceThreeYear,omitnil" name:"DiscountPriceThreeYear"`
	DiscountThreeYear           float64 `json:"DiscountThreeYear,omitnil" name:"DiscountThreeYear"`
	OriginalPriceFiveYear       float64 `json:"OriginalPriceFiveYear,omitnil" name:"OriginalPriceFiveYear"`
	DiscountPriceFiveYear       float64 `json:"DiscountPriceFiveYear,omitnil" name:"DiscountPriceFiveYear"`
	DiscountFiveYear            float64 `json:"DiscountFiveYear,omitnil" name:"DiscountFiveYear"`
	OriginalPriceOneYear        float64 `json:"OriginalPriceOneYear,omitnil" name:"OriginalPriceOneYear"`
	DiscountPriceOneYear        float64 `json:"DiscountPriceOneYear,omitnil" name:"DiscountPriceOneYear"`
	DiscountOneYear             float64 `json:"DiscountOneYear,omitnil" name:"DiscountOneYear"`
	Currency                    string  `json:"Currency"` // 货币类型
}

func (p *ItemPrice) String() string {
	return fmt.Sprintf("{UnitPrice: %v, ChargeUnit: %v, OriginalPrice: %v, DiscountPrice: %v, Discount: %v, UnitPriceDiscount: %v}",
		&p.UnitPrice,
		&p.ChargeUnit,
		&p.OriginalPrice,
		&p.DiscountPrice,
		&p.Discount,
		&p.UnitPriceDiscount,
	)
}

type IKEOptionsSpecification struct {
	PropoEncryAlgorithm  string `json:"PropoEncryAlgorithm,omitnil" name:"PropoEncryAlgorithm"`   // 加密算法，可选值：'3DES-CBC', 'AES-CBC-128', 'AES-CBS-192', 'AES-CBC-256', 'DES-CBC'，'SM4', 默认为3DES-CBC
	PropoAuthenAlgorithm string `json:"PropoAuthenAlgorithm,omitnil" name:"PropoAuthenAlgorithm"` // 认证算法：可选值：'MD5', 'SHA1'，'SHA-256' 默认为MD5
	ExchangeMode         string `json:"ExchangeMode,omitnil" name:"ExchangeMode"`                 // 协商模式：可选值：'AGGRESSIVE', 'MAIN'，默认为MAIN
	LocalIdentity        string `json:"LocalIdentity,omitnil" name:"LocalIdentity"`               // 本端标识类型：可选值：'ADDRESS', 'FQDN'，默认为ADDRESS
	RemoteIdentity       string `json:"RemoteIdentity,omitnil" name:"RemoteIdentity"`             // 对端标识类型：可选值：'ADDRESS', 'FQDN'，默认为ADDRESS
	LocalAddress         string `json:"LocalAddress,omitnil" name:"LocalAddress"`                 // 本端标识，当LocalIdentity选为ADDRESS时，LocalAddress必填。localAddress默认为vpn网关公网IP
	RemoteAddress        string `json:"RemoteAddress,omitnil" name:"RemoteAddress"`               // 对端标识，当RemoteIdentity选为ADDRESS时，RemoteAddress必填
	LocalFqdnName        string `json:"LocalFqdnName,omitnil" name:"LocalFqdnName"`               // 本端标识，当LocalIdentity选为FQDN时，LocalFqdnName必填
	RemoteFqdnName       string `json:"RemoteFqdnName,omitnil" name:"RemoteFqdnName"`             // 对端标识，当remoteIdentity选为FQDN时，RemoteFqdnName必填
	DhGroupName          string `json:"DhGroupName,omitnil" name:"DhGroupName"`                   // DH group，指定IKE交换密钥时使用的DH组，可选值：'GROUP1', 'GROUP2', 'GROUP5', 'GROUP14', 'GROUP24'，
	IKESaLifetimeSeconds uint64 `json:"IKESaLifetimeSeconds,omitnil" name:"IKESaLifetimeSeconds"` // IKE SA Lifetime，单位：秒，设置IKE SA的生存周期，取值范围：60-604800
	IKEVersion           string `json:"IKEVersion,omitnil" name:"IKEVersion"`                     // IKE版本
}

type IPSECOptionsSpecification struct {
	EncryptAlgorithm       string `json:"EncryptAlgorithm,omitnil" name:"EncryptAlgorithm"`             // 加密算法，可选值：'3DES-CBC', 'AES-CBC-128', 'AES-CBC-192', 'AES-CBC-256', 'DES-CBC', 'SM4', 'NULL'， 默认为AES-CBC-128
	IntegrityAlgorith      string `json:"IntegrityAlgorith,omitnil" name:"IntegrityAlgorith"`           // 认证算法：可选值：'MD5', 'SHA1'，'SHA-256' 默认为
	IPSECSaLifetimeSeconds uint64 `json:"IPSECSaLifetimeSeconds,omitnil" name:"IPSECSaLifetimeSeconds"` // IPsec SA lifetime(s)：单位秒，取值范围：180-604800
	PfsDhGroup             string `json:"PfsDhGroup,omitnil" name:"PfsDhGroup"`                         // PFS：可选值：'NULL', 'DH-GROUP1', 'DH-GROUP2', 'DH-GROUP5', 'DH-GROUP14', 'DH-GROUP24'，默认为NULL
	IPSECSaLifetimeTraffic uint64 `json:"IPSECSaLifetimeTraffic,omitnil" name:"IPSECSaLifetimeTraffic"` // IPsec SA lifetime(KB)：单位KB，取值范围：2560-604800
}

type TaskDetail struct {
	Code     int64  `json:"Code,omitnil" name:"Code"`         // 错误码。
	Message  string `json:"Message,omitnil" name:"Message"`   // 错误信息。
	JobId    int64  `json:"JobId,omitnil" name:"JobId"`       // 实例任务 ID。
	Progress int64  `json:"Progress,omitnil" name:"Progress"` // 实例任务进度。

	// 实例任务状态，可能的值包括：
	// "UNDEFINED" - 未定义；
	// "INITIAL" - 初始化；
	// "RUNNING" - 运行中；
	// "SUCCEED" - 执行成功；
	// "FAILED" - 执行失败；
	// "KILLED" - 已终止；
	// "REMOVED" - 已删除；
	// "PAUSED" - 已暂停。
	// "WAITING" - 等待中（可撤销）
	TaskStatus string `json:"TaskStatus,omitnil" name:"TaskStatus"`

	// 实例任务类型，可能的值包括：
	// "ROLLBACK" - 数据库回档；
	// "SQL OPERATION" - SQL操作；
	// "IMPORT DATA" - 数据导入；
	// "MODIFY PARAM" - 参数设置；
	// "INITIAL" - 初始化云数据库实例；
	// "REBOOT" - 重启云数据库实例；
	// "OPEN GTID" - 开启云数据库实例GTID；
	// "UPGRADE RO" - 只读实例升级；
	// "BATCH ROLLBACK" - 数据库批量回档；
	// "UPGRADE MASTER" - 主实例升级；
	// "DROP TABLES" - 删除云数据库库表；
	// "SWITCH DR TO MASTER" - 灾备实例提升为主。
	TaskType       string `json:"TaskType,omitnil" name:"TaskType"`
	StartTime      string `json:"StartTime,omitnil" name:"StartTime"`           // 实例任务开始时间。
	EndTime        string `json:"EndTime,omitnil" name:"EndTime"`               // 实例任务结束时间。
	AsyncRequestId string `json:"AsyncRequestId,omitnil" name:"AsyncRequestId"` // 异步任务的请求 ID。
	InstanceName   string `json:"InstanceName,omitnil" name:"InstanceName"`     // 实例名称
	InstanceId     string `json:"InstanceId,omitnil" name:"InstanceId"`         // 实例 ID。 注意：此字段可能返回 null，表示取不到有效值。
}

type AsyncRequestInfoResponse struct {
	Status    *string `json:"Status,omitnil" name:"Status"`       // 任务执行结果。可能的取值：INITIAL - 初始化，RUNNING - 运行中，SUCCESS - 执行成功，FAILED - 执行失败，KILLED - 已终止，REMOVED - 已删除，PAUSED - 终止中。 ,此字段可能返回 null，表示取不到有效值。
	Info      *string `json:"Info,omitnil" name:"Info"`           // 任务执行信息描述。 此字段可能返回 null，表示取不到有效值。
	RequestId *string `json:"RequestId,omitnil" name:"RequestId"` // 唯一请求 ID，每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
}

type TradeDealDetail struct {
	DealId      string   `json:"DealId,omitnil" name:"DealId"`           // 订单号ID，调用云API时使用此ID
	DealName    string   `json:"DealName,omitnil" name:"DealName"`       // 长订单ID，反馈订单问题给官方客服使用此ID
	ZoneId      int64    `json:"ZoneId,omitnil" name:"ZoneId"`           // 可用区id
	GoodsNum    int64    `json:"GoodsNum,omitnil" name:"GoodsNum"`       // 订单关联的实例数
	Creater     string   `json:"Creater,omitnil" name:"Creater"`         // 创建用户uin
	CreatTime   string   `json:"CreatTime,omitnil" name:"CreatTime"`     // 订单创建时间
	OverdueTime string   `json:"OverdueTime,omitnil" name:"OverdueTime"` // 订单超时时间
	EndTime     string   `json:"EndTime,omitnil" name:"EndTime"`         // 订单完成时间
	Status      int64    `json:"Status,omitnil" name:"Status"`           // 订单状态 1：未支付 2:已支付，未发货 3:发货中 4:发货成功 5:发货失败 6:已退款 7:已关闭订单 8:订单过期 9:订单已失效 10:产品已失效 11:代付拒绝 12:支付中
	Description string   `json:"Description,omitnil" name:"Description"` // 订单状态描述
	Price       int64    `json:"Price,omitnil" name:"Price"`             // 订单实际总价，单位：分
	InstanceIds []string `json:"InstanceIds,omitnil" name:"InstanceIds"` // 实例ID
}
